package aceim.app.widgets.adapters;
import java.util.ArrayList;
import java.util.List;
import aceim.api.dataentity.ListFeature;
import aceim.app.AceImException;
import aceim.app.R;
import aceim.app.dataentity.ProtocolResources;
import aceim.app.widgets.adapters.IconTitleAdapter.IconTitleItem;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView.LayoutParams;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class IconTitleAdapter extends ArrayAdapter<IconTitleItem> {
private int selectedItem = -1;
private final int textViewResourceId;
private final LayoutParams layoutParams;
public IconTitleAdapter(Context context, int resource, List<IconTitleItem> objects) {
this(context, resource, android.R.id.title, objects);
}
public IconTitleAdapter(Context context, int resource, int textViewResourceId, List<IconTitleItem> objects) {
this(context, resource, textViewResourceId, objects, null);
}
public IconTitleAdapter(Context context, int resource, int textViewResourceId, List<IconTitleItem> objects, LayoutParams layoutParams) {
super(context, resource, textViewResourceId, objects);
this.textViewResourceId = textViewResourceId;
this.layoutParams = layoutParams;
}
@SuppressWarnings("rawtypes")
public View getView(final int position, View convertView, final ViewGroup parent) {
View v = super.getView(position, convertView, parent);
ImageView icon = (ImageView) v.findViewById(R.id.icon);
TextView title = (TextView) v.findViewById(textViewResourceId);
IconTitleItem item = getItem(position);
if (icon != null) {
icon.setImageDrawable(item.icon);
}
if (title != null) {
title.setText(item.title);
}
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((AdapterView)parent).performItemClick(v, position, 0);
}
});
if (selectedItem > -1 && selectedItem == position) {
v.setBackgroundResource(R.drawable.dummy_icon);
} else {
v.setBackgroundResource(android.R.drawable.menuitem_background);
}
if (item.id != null) {
v.setTag(item.id);
}
if (layoutParams != null) {
v.setLayoutParams(layoutParams);
}
return v;
}
public static class IconTitleItem {
private Drawable icon;
private String title;
private String id;
/**
* @return the icon
*/
public Drawable getIcon() {
return icon;
}
/**
* @param icon the icon to set
*/
public void setIcon(Drawable icon) {
this.icon = icon;
}
/**
* @return the title
*/
public String getTitle() {
return title;
}
/**
* @param title the title to set
*/
public void setTitle(String title) {
this.title = title;
}
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
}
public static IconTitleAdapter fromListFeature(Context context, int resource, ProtocolResources protocolResources, ListFeature feature) throws AceImException{
List<IconTitleItem> objects = new ArrayList<IconTitleItem>();
Resources resources = protocolResources.getNativeResourcesForProtocol(null);
if (feature != null) {
if (feature.isNullable()) {
IconTitleItem noitem = new IconTitleItem();
noitem.setTitle(context.getString(R.string.clear));
noitem.setIcon(context.getResources().getDrawable(R.drawable.empty));
objects.add(noitem);
}
int[] names = feature.getNames();
int[] drawables = feature.getDrawables();
for (int i =0 ; i<Math.min(names.length, drawables.length); i++ ) {
IconTitleItem item = new IconTitleItem();
item.setTitle(resources.getString(names[i]));
item.setIcon(resources.getDrawable(drawables[i]));
objects.add(item);
}
}
return new IconTitleAdapter(context, resource, objects);
}
/**
* @return the selectedItem
*/
public int getSelectedItem() {
return selectedItem;
}
/**
* @param selectedItem the selectedItem to set
*/
public void setSelectedItem(int selectedItem) {
this.selectedItem = selectedItem;
}
}